<?php
namespace Leeflets;

/**
 * Enqueuing styles (pulled in from WordPress)
 *
 */

class Styles extends Assets {
	var $base_url;
	var $content_url;
	var $text_direction = 'ltr';
	var $concat = '';
	var $concat_version = '';
	var $do_concat = false;
	var $print_html = '';
	var $print_code = '';
	var $default_dirs;

	private $router, $config;

	function __construct( $base_url, Router $router, Config $config, $default_version = '' ) {
		$this->router = $router;
		$this->config = $config;
		parent::__construct( $base_url, $default_version );

        $this->add( 'bootstrap', $router->admin_url( '/core/theme/asset/bootstrap/core/css/bootstrap.min.css' ), array(), '2.2.1' );
        $this->add( 'bootstrap-responsive', $router->admin_url( '/core/theme/asset/bootstrap/core/css/bootstrap-responsive.min.css' ), array( 'bootstrap' ), '2.2.1' );
        $this->add( 'bootstrap-datepicker', $router->admin_url( '/core/theme/asset/bootstrap/datepicker/css/datepicker.css' ), array( 'bootstrap' ) );
        $this->add( 'bootstrap-wysihtml5', $router->admin_url( '/core/theme/asset/bootstrap/wysihtml5/css/bootstrap-wysihtml5.css' ), array( 'bootstrap' ) );
        $this->add( 'jquery-fileupload', $router->admin_url( '/core/theme/asset/css/jquery.fileupload-ui.css' ), array(), '6.10' );
    }

    function add_enqueue( $handle, $src, $deps = array(), $ver = false, $media = 'all' ) {
        $handle = explode( '?', $handle );
        $handle = $handle[0];

        $this->add( $handle, $src, $deps, $ver, $media );

        $this->enqueue( $handle );
    }

	function do_item( $handle ) {
		if ( !parent::do_item( $handle ) )
			return false;

		$obj = $this->registered[$handle];
		if ( null === $obj->ver )
			$ver = '';
		else
			$ver = $obj->ver ? $obj->ver : $this->default_version;

		if ( isset( $this->args[$handle] ) )
			$ver = $ver ? $ver . '&amp;' . $this->args[$handle] : $this->args[$handle];

		if ( $this->do_concat ) {
			if ( $this->in_default_dir( $obj->src ) && !isset( $obj->extra['conditional'] ) && !isset( $obj->extra['alt'] ) ) {
				$this->concat .= "$handle,";
				$this->concat_version .= "$handle$ver";

				$this->print_code .= $this->get_data( $handle, 'after' );

				return true;
			}
		}

		if ( isset( $obj->args ) )
			$media = htmlspecialchars( $obj->args );
		else
			$media = 'all';

		$href = $this->_css_href( $obj->src, $ver, $handle );
		$rel = isset( $obj->extra['alt'] ) && $obj->extra['alt'] ? 'alternate stylesheet' : 'stylesheet';
		$title = isset( $obj->extra['title'] ) ? "title='" . htmlspecialchars( $obj->extra['title'] ) . "'" : '';

		$end_cond = $tag = '';
		if ( isset( $obj->extra['conditional'] ) && $obj->extra['conditional'] ) {
			$tag .= "<!--[if {$obj->extra['conditional']}]>\n";
			$end_cond = "<![endif]-->\n";
		}

		$tag .= "<link rel=\"$rel\" id=\"$handle-css\" $title href=\"$href\" type=\"text/css\" media=\"$media\" />\n";
		if ( 'rtl' === $this->text_direction && isset( $obj->extra['rtl'] ) && $obj->extra['rtl'] ) {
			if ( is_bool( $obj->extra['rtl'] ) ) {
				$suffix = isset( $obj->extra['suffix'] ) ? $obj->extra['suffix'] : '';
				$rtl_href = str_replace( "{$suffix}.css", "-rtl{$suffix}.css", $this->_css_href( $obj->src , $ver, "$handle-rtl" ) );
			} else {
				$rtl_href = $this->_css_href( $obj->extra['rtl'], $ver, "$handle-rtl" );
			}

			$tag .= "<link rel=\"$rel\" id=\"$handle-rtl-css\" $title href=\"$rtl_href\" type=\"text/css\" media=\"$media\" />\n";
		}

		$tag .= $end_cond;

		if ( $this->do_concat ) {
			$this->print_html .= $tag;
			$this->print_html .= $this->print_inline_style( $handle, false );
		} else {
			echo $tag;
			$this->print_inline_style( $handle );
		}

		return true;
	}

	function add_inline_style( $handle, $code ) {
		if ( !$code )
			return false;

		$after = $this->get_data( $handle, 'after' );
		if ( !$after )
			$after = array();

		$after[] = $code;

		return $this->add_data( $handle, 'after', $after );
	}

	function print_inline_style( $handle, $echo = true ) {
		$output = $this->get_data( $handle, 'after' );

		if ( empty( $output ) )
			return false;

		$output = implode( "\n", $output );

		if ( !$echo )
			return $output;

		echo "<style type='text/css'>\n";
		echo "$output\n";
		echo "</style>\n";

		return true;
	}

	function all_deps( $handles, $recursion = false, $group = false ) {
		$r = parent::all_deps( $handles, $recursion );
		//if ( !$recursion )
		//$this->to_do = apply_filters( 'print_styles_array', $this->to_do );
		return $r;
	}

	function _css_href( $src, $ver, $handle ) {
		if ( !is_bool( $src ) && !preg_match( '|^(https?:)?//|', $src ) && ! ( $this->content_url && 0 === strpos( $src, $this->content_url ) ) ) {
			$src = $this->base_url . $src;
		}

		if ( !empty( $ver ) )
			$src = String::add_query_arg( 'ver', $ver, $src );
		//$src = apply_filters( 'style_loader_src', $src, $handle );
		return filter_var( $src, FILTER_SANITIZE_URL );
	}

	function in_default_dir( $src ) {
		if ( ! $this->default_dirs )
			return true;

		foreach ( (array) $this->default_dirs as $test ) {
			if ( 0 === strpos( $src, $test ) )
				return true;
		}
		return false;
	}

	function do_footer_items() { // HTML 5 allows styles in the body, grab late enqueued items and output them in the footer.
		$this->do_items( false, 1 );
		return $this->done;
	}

	function reset() {
		$this->do_concat = false;
		$this->concat = '';
		$this->concat_version = '';
		$this->print_html = '';
	}
}
